#!/bin/bash

# 检查 Ubuntu 版本，确保仅支持 18.04 和 20.04
UBUNTU_VERSION=$(lsb_release -rs)
if [[ "$UBUNTU_VERSION" != "18.04" && "$UBUNTU_VERSION" != "20.04" ]]; then
    echo "此脚本仅支持 Ubuntu 18.04 和 20.04。检测到的版本为 $UBUNTU_VERSION，脚本退出。"
    exit 1
fi

# 获取当前脚本所在的目录，切换到脚本所在目录
current_dir="$(dirname "$(readlink -f "$0")")"
cd $current_dir

# 杀死占用端口 5901 和 9004 的进程
# 在运行 x11vnc 和 Websockify 之前，确保端口 5901 (VNC) 和 9004 (Websockify) 未被其他进程占用。
# 如果有进程占用了这些端口，fuser 命令会杀掉它们，避免端口冲突。
sudo fuser -k 5901/tcp
sudo fuser -k 9004/tcp

# 更新系统并安装必要的包
# x11vnc 是 VNC 服务器，novnc 提供 Web 客户端支持，而 Websockify 将 VNC 转换为 WebSocket 以支持浏览器连接。
sudo apt update
sudo apt install -y x11vnc novnc websockify

# 设置固定的 VNC 明文密码为 handsfree
# 创建 .vnc 目录并设置 VNC 密码为 "handsfree"。明文密码存储在 ~/.vnc/passwd 文件中，权限设置为 600 以保护密码安全。
mkdir -p ~/.vnc
echo "handsfree" > ~/.vnc/passwd
chmod 600 ~/.vnc/passwd

# 创建 systemd 服务文件，使 x11vnc 在系统启动时自动运行
# 通过 systemd 管理 x11vnc 的自动启动，确保在系统启动后运行 VNC 服务。
# 该服务将 x11vnc 绑定到物理显示器 :0（物理桌面），并使用 5901 端口供 VNC 客户端连接。
sudo bash -c "cat <<EOF > /etc/systemd/system/x11vnc.service
[Unit]
Description=Start x11vnc at startup.
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -display :0 -auth guess -forever -loop -noxdamage -rfbport 5901 -passwdfile /home/$(whoami)/.vnc/passwd
Restart=on-failure
User=$(whoami)

[Install]
WantedBy=multi-user.target
EOF"

# 创建 systemd 服务文件，使 websockify 在系统启动时自动运行
# Websockify 将 VNC (TCP) 转换为 WebSocket，允许浏览器通过 WebSocket 访问 VNC 服务。
# --web=/usr/share/novnc：指定 noVNC 网页文件的路径
# 9004：Websockify 的监听端口
# localhost:5901：指定 VNC 服务运行的地址和端口
sudo bash -c "cat <<EOF > /etc/systemd/system/websockify.service
[Unit]
Description=Start websockify at startup.
After=network.target x11vnc.service  # 确保 x11vnc 先启动

[Service]
ExecStart=/usr/bin/websockify --web=/usr/share/novnc 9004 localhost:5901
Restart=on-failure
User=$(whoami)

[Install]
WantedBy=multi-user.target
EOF"

# 重新加载 systemctl 配置，使新服务文件生效
sudo systemctl daemon-reload

# 启用并启动 x11vnc 和 websockify 服务
sudo systemctl enable x11vnc.service
sudo systemctl start x11vnc.service
sudo systemctl enable websockify.service
sudo systemctl start websockify.service

# 输出提示信息，告诉用户可以通过浏览器访问 VNC
echo "配置完成！您现在可以通过以下地址访问主机的物理桌面："
echo "http://$(hostname -I | awk '{print $1}'):9004"
